﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Event_Planner.Models;

namespace Event_Planner.Controllers
{
    public class OrganizadoresController : Controller
    {
        private DataAccess.Organizadores DataAccessOrganizadores = new DataAccess.Organizadores();

        //
        // GET: /Organizadores/

        public ViewResult Index()
        {
            if (!User.IsInRole("Administrador"))
                return View(DataAccessOrganizadores.db.Usuarios.Find(User.Identity.Name).OrganizadoresUsuario);

            return View();

        }

        //
        // GET: /Organizadores/Details/5

        public ActionResult Details(int id)
        {
            OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(id);
            if (Organizador == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el organizador ya no existe." });
            else
                return View(Organizador);
        }


        //
        // GET: /Organizadores/Create

        public ActionResult Create()
        {
            return View();
        }

        //
        // POST: /Organizadores/Create

        [HttpPost]
        public ActionResult Create(OrganizadoresModel organizadormodel)
        {
            if (ModelState.IsValid)
            {
                DataAccessOrganizadores.db.Usuarios.Find(User.Identity.Name).OrganizadoresUsuario.Add(organizadormodel);
                DataAccessOrganizadores.db.SaveChanges();

                return RedirectToAction("Index");
            }

            return View(organizadormodel);
        }

        //
        // GET: /Organizadores/Edit/5

        public ActionResult Edit(int id)
        {
            OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(id);
            if (Organizador == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el organizador ya no existe." });
            else
                return View(Organizador);
        }

        //
        // POST: /Organizadores/Edit/5

        [HttpPost]
        public ActionResult Edit(OrganizadoresModel organizadormodel)
        {
            if (ModelState.IsValid)
            {
                OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(organizadormodel.ID);
                if (Organizador == null)
                    return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el organizador ya no existe." });
                else
                {
                    DataAccessOrganizadores.db.Entry(organizadormodel).State = EntityState.Modified;
                    DataAccessOrganizadores.db.SaveChanges();
                    return RedirectToAction("Index");
                }
            }
            return View(organizadormodel);
        }

        //
        // GET: /Organizadores/Delete/5

        public ActionResult Delete(int id)
        {
            OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(id);
            if (Organizador == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el organizador ya no existe." });
            else
                return View(Organizador);
        }

        //
        // POST: /Organizadores/Delete/5

        [HttpPost, ActionName("Delete")]
        public ActionResult DeleteConfirmed(int id)
        {
            OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(id);
            if (Organizador == null)
                return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el organizador ya no existe." });
            else
            {
                DataAccessOrganizadores.EliminarOrganizador(id);
                return RedirectToAction("Index");
            }
        }

        protected override void Dispose(bool disposing)
        {
            DataAccessOrganizadores.db.Dispose();
            base.Dispose(disposing);
        }


        //
        // GET: /Organizadores/VerOrganizadoresDeEvento/5

        public ViewResult VerOrganizadoresDeEvento(int IDEvento)
        {
            ViewBag.IDEvento = IDEvento;
            return View(DataAccessOrganizadores.db.Eventos.Find(IDEvento).OrganizadoresEvento);
        }

        //
        // GET: /Organizadores/VerOrganizadoresDeEventoDesdeBuscar/5
        [AllowAnonymous]
        public ViewResult VerOrganizadoresDeEventoPublico(int IDEvento)
        {
            ViewBag.IDEvento = IDEvento;
            return View(DataAccessOrganizadores.db.Eventos.Find(IDEvento).OrganizadoresEvento);
        }


        //
        // GET: /Organizadores/AsociarOrganizadoresAEvento/5

        public ActionResult AsociarOrganizadoresAEvento(int IDEvento)
        {
              EventosModels Evento = DataAccessOrganizadores.db.Eventos.Find(IDEvento);
              if (Evento == null)
                  return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
              else
              {
                  ViewData["IDEvento"] = IDEvento;

                  DataAccess.Eventos DataAccessEventos = new DataAccess.Eventos();

                  List<SeleccionOrganizadoresModel> ListaSeleccionOrganizadoresModel = new List<SeleccionOrganizadoresModel>();

                  foreach (OrganizadoresModel Organizador in DataAccessOrganizadores.db.Usuarios.Find(User.Identity.Name).OrganizadoresUsuario)
                  {
                      SeleccionOrganizadoresModel seleccionorganizadoresmodel = new SeleccionOrganizadoresModel
                      {
                          ID = Organizador.ID,
                          NombreOrganizador = Organizador.NombreOrganizador,
                          ApellidoOrganizador = Organizador.ApellidoOrganizador,
                          EmailOrganizador = Organizador.EmailOrganizador,
                          AsociadoAlEvento = DataAccessEventos.EsOrganizadoresDelEvento(Organizador.ID, IDEvento)
                      };

                      ListaSeleccionOrganizadoresModel.Add(seleccionorganizadoresmodel);
                  }

                  return View(ListaSeleccionOrganizadoresModel);
              }
        }


        //
        // POST: /Organizadores/AsociarOrganizadoresAEvento/5

        [HttpPost]
        public ActionResult AsociarOrganizadoresAEvento(int[] ID, int IDEvento)
        {
              EventosModels Evento = DataAccessOrganizadores.db.Eventos.Find(IDEvento);
              if (Evento == null)
                  return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el evento ya no existe." });
              else
              {
                  DataAccess.Eventos DataAccessEventos = new DataAccess.Eventos();
                  DataAccessEventos.EliminarOrganizadoresDelEvento(IDEvento);
                  if (ID != null)
                  {
                      foreach (int IDOrganizador in ID)
                      {
                          OrganizadoresModel Organizador = DataAccessOrganizadores.db.Organizadores.Find(IDOrganizador);
                          if (Organizador == null)
                              return RedirectToAction("ErrorPersonalizado", "Error", new { MensajeError = "el o los organizadores ya no existen." });
                          else
                          {
                              Evento.OrganizadoresEvento.Add(Organizador);
                              Organizador.EventosOrganizados.Add(Evento);
                              DataAccessOrganizadores.db.SaveChanges();
                          }
                      }
                  }

                  return RedirectToAction("Index", "Eventos");
              }
        }


    }
}
